home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / units / knapper.pas < prev    next >
Pascal/Delphi Source File  |  1994-04-02  |  3KB  |  97 lines

  1. UNIT Knapper;
  2. {$O+,F+}
  3.  
  4. INTERFACE
  5.  
  6. CONST INNE=TRUE; UTE=FALSE;      { Er knappen presset INN eller UT }
  7.  
  8. TYPE  Knapp=OBJECT
  9.         Xa,Xb,Y,Fg,Bg:BYTE; Title:STRING; Paa:BOOLEAN;
  10.         PROCEDURE Fjern;
  11.         PROCEDURE Tegn(B:BOOLEAN);
  12.         PROCEDURE Init(X1,X2,Yp,Dv,Ev:BYTE; Fv:STRING);
  13.         FUNCTION  Trykket:BOOLEAN;
  14.         FUNCTION  Byttet:BOOLEAN;
  15.       END;
  16.  
  17. VAR   KnappDefPaa:BOOLEAN;       { Skal knappen være inne eller ute som def }
  18.       Stopp,Beskt,Shell:KNAPP;
  19.  
  20. IMPLEMENTATION
  21.  
  22. USES OGWare;
  23.  
  24. VAR Hl,Sd:ARRAY[0..15] OF BYTE;
  25.  
  26. PROCEDURE Knapp.Fjern;
  27.  VAR C,T,U:BYTE; D:WORD;
  28.  BEGIN
  29.    C:=Bg*17; D:=Y*80-81;
  30.    FOR T:=Xa TO Xb DO FOR U:=0 TO 2 DO MemW[$B800:(T+D+U*80)*2]:=32+C*256;
  31.  END;
  32.  
  33. PROCEDURE Knapp.Tegn(B:BOOLEAN);
  34.  VAR T,C,Ov,Nh:BYTE; U:WORD;
  35.  BEGIN
  36.    MouseSave;
  37.    C:=Bg*17; U:=Y*80-81;
  38.    IF B=INNE THEN BEGIN Ov:=Sd[Bg]+Bg*16; Nh:=Hl[Bg]+Bg*16; END
  39.              ELSE BEGIN Ov:=Hl[Bg]+Bg*16; Nh:=Sd[Bg]+Bg*16; END;
  40.    FOR T:=Xa+1 TO Xb-1 DO
  41.     BEGIN
  42.       MemW[$B800:(T+U)*2    ]:=196+Ov*256;
  43.       MemW[$B800:(T+U)*2+160]:= 32+C *256;
  44.       MemW[$B800:(T+U)*2+320]:=196+Nh*256;
  45.     END;
  46.    MemW[$B800:(Xa+U)*2    ]:=218+Ov*256; MemW[$B800:(Xb+U)*2    ]:=191+Nh*256;
  47.    MemW[$B800:(Xa+U)*2+160]:=179+Ov*256; MemW[$B800:(Xb+U)*2+160]:=179+Nh*256;
  48.    MemW[$B800:(Xa+U)*2+320]:=192+Ov*256; MemW[$B800:(Xb+U)*2+320]:=217+Nh*256;
  49.    IF B THEN C:=Sd[Bg]+Bg*16 ELSE C:=Fg+Bg*16;
  50.    Title:=COPY(Title,1,(Xb-Xa-1));
  51.    U:=Y*80-1+(Xb-Xa-1-LENGTH(Title)) DIV 2;
  52.    FOR T:=1 TO LENGTH(Title) DO
  53.     BEGIN MemW[$B800:(Xa+T+U)*2]:=ORD(Title[T])+C*256; END;
  54.    MouseLoad;
  55.  END;
  56.  
  57. PROCEDURE Knapp.Init(X1,X2,Yp,Dv,Ev:BYTE; Fv:STRING);
  58.  BEGIN
  59.    Xa:=X1; Xb:=X2; Y:=Yp; Fg:=Dv; Bg:=Ev; Title:=Fv;
  60.    Paa:=KnappDefPaa; Tegn(Paa);
  61.  END;
  62.  
  63. FUNCTION  Knapp.Trykket:BOOLEAN;
  64.  BEGIN
  65.    Trykket:=FALSE;
  66.    IF (MouseXpos>=Xa) AND (MouseXpos<=Xb) AND
  67.       (MouseYpos>=Y) AND (MouseYpos<=Y+2) AND (MouseButton=1) THEN
  68.     BEGIN
  69.       Tegn(NOT Paa); Beep(200,10);
  70.       REPEAT UNTIL MouseButton<>1;
  71.       Beep(200,10); Tegn(Paa); Trykket:=TRUE;
  72.       IF (MouseXpos<Xa) OR (MouseXpos>Xb)  OR
  73.          (MouseYpos<Y)  OR (MouseYpos>Y+2) THEN Trykket:=FALSE;
  74.     END;
  75.  END;
  76.  
  77. FUNCTION  Knapp.Byttet:BOOLEAN;
  78.  BEGIN
  79.    Byttet:=FALSE;
  80.    IF (MouseXpos>=Xa) AND (MouseXpos<=Xb) AND
  81.       (MouseYpos>=Y) AND (MouseYpos<=Y+2) AND (MouseButton=1) THEN
  82.     BEGIN
  83.       Paa:=NOT Paa;
  84.       Byttet:=TRUE;
  85.       Tegn(Paa); Beep(200,10);
  86.       REPEAT UNTIL MouseButton<>1;
  87.     END;
  88.  END;
  89.  
  90. BEGIN
  91.   Sd[00]:=08; Hl[00]:=07; Sd[01]:=00; Hl[01]:=09; Sd[02]:=00; Hl[02]:=10;
  92.   Sd[03]:=01; Hl[03]:=11; Sd[04]:=00; Hl[04]:=12; Sd[05]:=00; Hl[05]:=13;
  93.   Sd[06]:=00; Hl[06]:=14; Sd[07]:=08; Hl[07]:=15; Sd[08]:=00; Hl[08]:=07;
  94.   Sd[09]:=01; Hl[09]:=03; Sd[10]:=02; Hl[10]:=11; Sd[11]:=03; Hl[11]:=15;
  95.   Sd[12]:=04; Hl[12]:=14; Sd[13]:=05; Hl[13]:=15; Sd[14]:=06; Hl[14]:=15;
  96.   Sd[15]:=08; Hl[15]:=07; KnappDefPaa:=UTE;
  97. END.